#include <iostream>
#include <string>
#include <map>

enum PluginConfigType
{
	PLUGIN_CONFIGTYPE_STRING,
	PLUGIN_CONFIGTYPE_INT,
	PLUGIN_CONFIGTYPE_BOOL,
	PLUGIN_CONFIGTYPE_FLOAT,
	PLUGIN_CONFIGTYPE_DOUBLE,
	PLUGIN_CONFIGTYPE_LONG,
	PLUGIN_CONFIGTYPE_LONGLONG
};

static std::map<std::string, PluginConfigType> str_config_map;

void InitMap() {
    str_config_map["name"] = PLUGIN_CONFIGTYPE_STRING;
    str_config_map["label"] = PLUGIN_CONFIGTYPE_STRING;
}

int reads(std::string str) {
    std::cout << str << std::endl;
    return 0;
}

int readi(int input) {
    std::cout << input << std::endl;
    return 0;
}

int readb(bool input) {
    std::cout << input << std::endl;
    return 0;
}

int readf(float input) {
    std::cout << input << std::endl;
    return 0;
}

int readd(double input) {
    std::cout << input << std::endl;
    return 0;
}

int readl(long input) {
    std::cout << input << std::endl;
    return 0;
}

int readll(long long input) {
    std::cout << input << std::endl;
    return 0;
}

int read(std::string, PluginConfigType type) {

}

int main() {
    std::string input;
    std::cout << "please input a string-enum\n";
    std::cin >> input;

    switch (str_value_map[input])
    {
    case Str1:
        std::cout << "str1\n";
        break;
    case Str2:
        std::cout << "str2\n";
        break;
    case Str3:
        std::cout << "str3\n";
    case NotDefined:
        std::cout << "not defined\n";
        break;
    default:
        std::cout << "invaild value!\n";
        break;
    }

    return 0;
}